package com.ww.learn.oop.sam

/**
 * 对比普通函数
 */

// 使用函数类型
typealias StringMapper = (String) -> String

fun processWithFunction(input: String, mapper: StringMapper): String {
    return mapper(input)
}

// 使用 SAM
fun interface StringMapperSAM {
    fun map(input: String): String
}

fun processWithSAM(input: String, mapper: StringMapperSAM): String {
    return mapper.map(input)
}

fun main() {
    val input = "hello"

    // 使用函数类型
    val result1 = processWithFunction(input) { it.uppercase() }
    // 使用 SAM
    val result2 = processWithSAM(input) { it.uppercase() }

    println(result1)
    println(result2)
}